// ============================================================================================
// 装饰器Decorator(要打开   "experimentalDecorators": true )
// 类装饰器
function log(agt: unknown) {
  console.log(agt);
  return (target: unknown) => {
    console.log(target);
  };
}
// 方法装饰器
function log1(agt: unknown) {
  console.log(agt);
  return (target: unknown, name: unknown, descriptor: unknown) => {
    console.log(target, name, descriptor);
  };
}

@log("类装饰器装饰器传入的参数")
class Man {
  name: string = "joLin";
  constructor(name: string) {
    this.name = name;
    console.log("我是构造函数" + name);
  }
  @log1("方法装饰器de参数") say(): void {
    console.log("哎呦不错哦~");
  }
}
const j = new Man("jay");
console.log(j.name);






// ============================================================================================
// 泛型约束Generic
// 简单来说，就是声明一个类型变量，声明一个将来才知道具体类型的类型，实现类型复用
// function fn<j, j1>(arg: j): j {
//   // 泛型变量可以在函数内部任意地方使用
//   // var a :j1
//   return arg;
// }
// console.log(`我是${fn("jay")},哎呦不错哦~`);
// console.log(`我是${fn("jay")},我今年${fn(18)}了`);